﻿using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using Siderys.Blog.Search.Engine;
using Siderys.Blog.Search.Engine.Resultado;
namespace Siderys.Blog.Search.UI.WebParts
{
    [Guid("356C1B0C-489C-42d6-B3AE-32A22ADA696D")]
    public class WebPartResultadoSearchSql : Microsoft.SharePoint.WebPartPages.WebPart
    {
        private Exception mError = null;
        protected Label mLblResultado = null;
        private ConsultaSQL mConsulta = null;
        private string mAmbito = string.Empty;
        private string mTxtBusqueda = string.Empty;
        private List<ObjetoResultado> mResultadoBusqueda = null;
        private HtmlTable mTablaResultado = null;
        public WebPartResultadoSearchSql()
        {
        }

        private void CargarQueryStringBusqueda()
        {
            if (!string.IsNullOrEmpty(HttpContext.Current.Request["k"]))
            {
                mTxtBusqueda = HttpContext.Current.Request["k"].ToString();
            }
            if (!string.IsNullOrEmpty(HttpContext.Current.Request["s"]))
            {
                mAmbito = HttpContext.Current.Request["s"].ToString();
            }
        }
        protected override void CreateChildControls()
        {
            try
            {
                CargarQueryStringBusqueda();
                mLblResultado = new Label();
                if (!mTxtBusqueda.Equals(string.Empty))
                {
                    mConsulta = new ConsultaSQL(mTxtBusqueda, mAmbito);
                    mResultadoBusqueda = mConsulta.GetResultadoBusquedaCol();
                    if (mResultadoBusqueda != null)
                    {
                        mTablaResultado = ArmarTablaResultado(mResultadoBusqueda);
                        Controls.Add(mTablaResultado);
                    }
                    else
                    {
                        mLblResultado.Text = "No hay resultados para su búsqueda";
                        Controls.Add(mLblResultado);
                    }
                }
                else
                {
                    mLblResultado.Text = "Debe Ingresar un texto para buscar";
                    Controls.Add(mLblResultado);
                }                
            }
            catch (Exception ex)
            {
                this.mError = ex;
            }
            base.CreateChildControls();
        }

        private HtmlTable ArmarTablaResultado(List<ObjetoResultado> pResultadoBusqueda)
        {
            HtmlTableRow lRow = null;
            HtmlTableCell lCell = null;
            HtmlTable lRetorno = new HtmlTable();
            lRetorno.Attributes.Add("class", "srch-results");
            foreach (ObjetoResultado lObjResultado in pResultadoBusqueda)
            {
                lRow = new HtmlTableRow();
                lCell = new HtmlTableCell();//titulo
                HtmlAnchor lLink = new HtmlAnchor();
                lLink.HRef = lObjResultado.Path;
                lLink.InnerText = lObjResultado.Title;
                lLink.Target = "blank";
                lCell.Controls.Add(lLink);
                lCell.Attributes.Add("class", "srch-Title");
                lRow.Controls.Add(lCell);
                lRetorno.Controls.Add(lRow);

                lRow = new HtmlTableRow();
                lCell = new HtmlTableCell();//Description
                lCell.InnerHtml = lObjResultado.Description;
                lCell.Attributes.Add("class", "srch-Description");
                lRow.Controls.Add(lCell);
                lRetorno.Controls.Add(lRow);
            }
            return lRetorno;
        }

        protected override void Render(HtmlTextWriter writer)
        {
            if (this.mError != null)
            {
                writer.Write(this.mError.ToString());
            }
            base.Render(writer);
        } 
    }
}
